/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2006，所有权利保留。
 * 
 * 文件名：	HButtonCalendar.java
 * 模块说明：	
 * 修改历史：
 * 2006-9-20 - lxm - 创建。
 */
package com.hd123.rumba.jsp;

import com.hd123.rumba.request.Dictionary;
import com.hd123.rumba.request.JspLib;

/**
 * 日期选择按钮 | 服务端界面控件
 * <p>
 * 
 * 在基类的基础上，指定了默认的image、disableImage、type（=VALUE_TYPE_READWRITE）参数。并忽略了url参数。
 * 
 * @author lxm
 * 
 */
public class HButtonCalendar extends StandardHButton {

  public HButtonCalendar(Dictionary dd, Object[] params) {
    super(dd, params);
    assignParamDefaultValues();
  }

  public HButtonCalendar(Object[] params) {
    super(params);
    assignParamDefaultValues();
  }

  private Style style;
  private String displayFormat;

  /**
   * 属性：日期时间选择器的风格。<br>
   * 对应参数名"style"，下一个参数为取值，类型为{@link #Style}。
   */
  public Style getStyle() {
    return style;
  }

  public void setStyle(Style style) {
    this.style = style;
  }

  public String getDisplayFormat() {
    return displayFormat;
  }

  public void setDisplayFormat(String displayFormat) {
    this.displayFormat = displayFormat;
  }

  public void setUrl(String url) {
    // Do Nothing
  }

  protected boolean readParam(String paramName, Object paramValue) {
    // 忽略基类的url参数。
    if ("url".equals(paramName))
      return true;
    if (super.readParam(paramName, paramValue))
      return true;
    if ("style".equals(paramName)) {
      style = (Style) paramValue;
      return true;
    } else if ("displayFormat".equals(paramName)) {
      displayFormat = (String) paramValue;
      return true;
    }
    return false;
  }

  protected void buildHTML(int accessMode, int promptMode) {
    String name = this.getField().getName();
    StringBuffer sb = new StringBuffer();
    sb.append("javascript: RCalendar.show(");
    sb.append("$('" + name + "')");
    sb.append(", ");
    sb.append("parseDate($F('" + name + "'))");
    sb.append(", ");
    sb.append("$('" + name + "_calendarButton')");
    sb.append(", ");
    if (displayFormat != null && displayFormat.trim().length() > 0)
      sb.append("null, '" + displayFormat + "'");
    else
      sb.append(this.style.getValue());
    sb.append(");");
    this.url = sb.toString();

    super.buildHTML(accessMode, promptMode);

    if (this.getA() != null)
      this.getA().setID(name + "_calendarButton");
  }

  private void assignParamDefaultValues() {
    if (this.getDisableImage() == null)
      this.setDisableImage(JspLib.getStaticContent("rumba/images/general/calendar_dis.gif"));
    if (this.getImage() == null)
      this.setImage(JspLib.getStaticContent("rumba/images/general/calendar.gif"));
    if (this.getHint() == null)
      this.setHint("打开日历");
    if (this.style == null)
      this.style = Style.ymd;
    this.setType(VALUE_TYPE_READWRITE);
  }

  /**
   * {@link #style}的取值。
   * 
   * @author lxm
   * 
   */
  public enum Style {
    /** 精确到日。 */
    ymd(0),
    /** 精确到分钟。 */
    ymdhm(1),
    /** 精确到秒。 */
    ymdhms(2);

    private Integer value;

    Style(int value) {
      this.value = new Integer(value);
    }

    public Integer getValue() {
      return this.value;
    }
  }

}
